﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BusinessLayer.Interface;
using BusinessLayer.Facade;
using EntityLayer;

namespace PresentationLayer
{
    public partial class wfrmLegajoActualizar : System.Web.UI.Page
    {

        private clsIFacadeLegajoActualizar LegajoActualizar;
        private List<SGP_LEGAJO> listaLegajo = null;
        private List<SGP_ENTIDAD> listaEntidad = null;
        private List<SGP_ESTADO> listaEstado = null;
        private IEnumerable<Object> lista = null;
        private List<PRM_UNI_ORGANICA> listaUnidOrg = null;
        private SGP_LEGAJO objSGP_Legajo;
        private String msg, titulo;
        private String op = "N";

        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if (!IsPostBack)
                {
                    if (Session["op"] == null)
                    {
                        Session["ingresar"] = false;
                        Session["msg"] = "No existe opción para el procedimiento.";
                        Session["titulo"] = "Mensaje";
                        Response.Redirect("wfrmLegajoListar.aspx", false);
                        return;
                    }
                    else
                    {
                        LegajoActualizar = new clsFacadeLegajoActualizar();
                        CargarDistritoJuficial();
                        CargarDepartamento();
                        CargarAbogado();
                        CargarEntidad();
                        CargarEstado();
                        CargarUnidOrg();
                        if (cboEstado.Items.Count >= 0) cboEstado.SelectedIndex = 0;
                        op = Session["op"].ToString();
                        if (op == "N")
                        {
                            txtNumLegajo.Text = LegajoActualizar.ObtenerUltimoNumero();
                        }
                        else if (op == "M")
                        {
                            if (!ObtenerDatos())
                            {
                                Response.Redirect("wfrmLegajoListar.aspx", false);
                                return;
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                titulo = "Page_Load";
                MostrarComentario(ex.Message, titulo);
            }
        }

        private Boolean ObtenerDatos()
        {
            Boolean ok = true;
            msg = String.Empty;
            try
            {
                if (Session["cod"] == null) { ok = false; msg = "No existe el código del Legajo"; }
                if (ok)
                {
                    String cod = Session["cod"].ToString();
                    LegajoActualizar = new clsFacadeLegajoActualizar();
                    listaLegajo = new List<SGP_LEGAJO>();
                    listaLegajo = LegajoActualizar.MostrarLegajo(cod);

                    if (listaLegajo == null || listaLegajo.Count() == 0)
                    {
                        ok = false;
                        msg = "No existen datos para el legajo seleccionado";
                    }

                    if (ok)
                    {
                        //Obtener Datos.
                        String CLEG_LEGAJO, CLEG_MODAPE, CDIS_DISJUD, CTAB_TIPPRO, CLEG_CODENT, CPRL_NUMEXP, CLEG_CODABO, CLEG_OBSLEG, CTAB_ESTLEG, CLEG_UBIGEO, CLEG_UBIDEP,
                            CLEG_UBIPRO, CLEG_UBIDIS, CPRL_DOCAUT, CLEG_UNIORG, CLEG_TITULO, NPER_SECPER, CTAB_PROCED, CTAB_MONTIP, NPRL_MONPAG;
                        DateTime? DLEG_FECREC, DPRL_DOCAUT, DLEG_APELEG, DLEG_FORADM, DLEG_FECEST;

                        CLEG_LEGAJO = listaLegajo[0].CLEG_LEGAJO;
                        CLEG_MODAPE = listaLegajo[0].CLEG_MODAPE;
                        CDIS_DISJUD = listaLegajo[0].CDIS_DISJUD;
                        CTAB_TIPPRO = listaLegajo[0].CTAB_TIPPRO;
                        DLEG_FECREC = listaLegajo[0].DLEG_FECREC;
                        CLEG_CODENT = listaLegajo[0].CLEG_CODENT;
                        CPRL_NUMEXP = listaLegajo[0].CPRL_NUMEXP;
                        CLEG_CODABO = listaLegajo[0].CLEG_CODABO;
                        CLEG_OBSLEG = listaLegajo[0].CLEG_OBSLEG;
                        DPRL_DOCAUT = listaLegajo[0].DPRL_DOCAUT;
                        CTAB_ESTLEG = listaLegajo[0].CTAB_ESTLEG;
                        DLEG_APELEG = listaLegajo[0].DLEG_APELEG;
                        DLEG_FORADM = listaLegajo[0].DLEG_FORADM;
                        CLEG_UBIGEO = listaLegajo[0].CLEG_UBIGEO;
                        DLEG_FECEST = listaLegajo[0].DLEG_FECEST;
                        CLEG_UBIDEP = listaLegajo[0].CLEG_UBIDEP;
                        CLEG_UBIPRO = listaLegajo[0].CLEG_UBIPRO;
                        CLEG_UBIDIS = listaLegajo[0].CLEG_UBIDIS;
                        CPRL_DOCAUT = listaLegajo[0].CPRL_DOCAUT;
                        CLEG_UNIORG = listaLegajo[0].CLEG_UNIORG;
                        CLEG_TITULO = listaLegajo[0].CLEG_TITULO;
                        NPER_SECPER = listaLegajo[0].NPER_SECPER.ToString();
                        CTAB_PROCED = listaLegajo[0].CTAB_PROCED;
                        CTAB_MONTIP = listaLegajo[0].CTAB_MONTIP;
                        NPRL_MONPAG = listaLegajo[0].NPRL_MONPAG.ToString();


                        //Setear los datos en los controles.
                        txtNumLegajo.Text = CLEG_LEGAJO;
                        cboModoApertura.Value = CLEG_MODAPE;
                        cboDistritoJudicial.Value = CDIS_DISJUD;
                        cboTipoProceso.Value = CTAB_TIPPRO;
                        dtpRecepcion.Value = DLEG_FECREC;
                        cboEntidadAgraviada.Value = CLEG_CODENT;
                        txtNumExpediente.Text = CPRL_NUMEXP;
                        cboAbogado.Value = CLEG_CODABO;
                        txtObservaciones.Text = CLEG_OBSLEG;
                        dtpFecDocAutorizacionDC.Value = DPRL_DOCAUT;
                        cboEstado.Value = CTAB_ESTLEG;
                        dtpFecFormulada.Value = DLEG_APELEG;
                        dtpFecFormalizada.Value = DLEG_FORADM;
                        cboDepartamento.Value = CLEG_UBIDEP;
                        cboProvincia.Value = CLEG_UBIPRO;
                        cboDistrito.Value = CLEG_UBIDIS;
                        dtpFecEstado.Value = DLEG_FECEST;
                        cboDepartamento.Value = CLEG_UBIDEP;
                        CargarProvincia(CLEG_UBIDEP);
                        cboProvincia.Value = CLEG_UBIPRO;
                        CargarDistrito(CLEG_UBIPRO);
                        cboDistrito.Value = CLEG_UBIDIS;
                        txtNumDocAutorizacion.Text = CPRL_DOCAUT;
                        cboUnidadOrganica.Value = CLEG_UNIORG;
                        txtTitulo.Text = CLEG_TITULO;
                        txtAbogado.Text = NPER_SECPER;
                        cboProcedencia.Value = CTAB_PROCED;
                        cboMoneda.Value = CTAB_MONTIP;
                        txtMontoPeritorio.Text = NPRL_MONPAG;
                    }
                }
            }
            catch (Exception ex)
            {
                ok = false;
                titulo = "ObtenerDatos";
                MostrarComentario(ex.Message, titulo);
            }
            if (!ok)
            {
                Session["ingresar"] = ok;
                Session["msg"] = msg;
            }
            return ok;
        }

        private void CargarDistritoJuficial()
        {
            try
            {
                List<SGP_DISJUD> listaDistJudicial = null;
                LegajoActualizar = new clsFacadeLegajoActualizar();
                listaDistJudicial = new List<SGP_DISJUD>();
                listaDistJudicial = LegajoActualizar.listarDistJudicial();

                if (listaDistJudicial == null || listaDistJudicial.Count() == 0) { return; }

                cboDistritoJudicial.DataSource = listaDistJudicial;
                cboDistritoJudicial.ValueField = "CDIS_CODDIS";
                cboDistritoJudicial.TextField = "CDIS_DESCRIPCION";
                cboDistritoJudicial.DataBind();
            }
            catch (Exception ex)
            {
                MostrarComentario(ex.Message, "CargarDistritoJuficial");
            }
        }

        private void CargarDepartamento()
        {
            try
            {
                lista = new List<Object>();
                LegajoActualizar = new clsFacadeLegajoActualizar();
                lista = LegajoActualizar.ListarDepartamentos();

                if (lista == null || lista.Count() == 0) { MostrarComentario("No existen datos para los departamentos."); return; }

                cboDepartamento.DataSource = lista;
                cboDepartamento.ValueField = "NDEP_SECDEPT";
                cboDepartamento.TextField = "CDEP_DESCRIP";
                cboDepartamento.DataBind();

            }
            catch (Exception ex)
            {
                MostrarComentario(ex.Message, "CargarDepartamento");
            }
        }

        private void CargarProvincia(String dept = "")
        {
            try
            {
                String IDDEPT = String.Empty;
                if (dept == String.Empty)
                {
                    if (cboDepartamento.SelectedItem == null) { MostrarComentario("Debe seleccionar un departamento."); return; }

                    IDDEPT = cboDepartamento.SelectedItem.Value.ToString();
                }
                else
                {
                    IDDEPT = dept;
                }

                lista = new List<Object>();
                LegajoActualizar = new clsFacadeLegajoActualizar();
                lista = LegajoActualizar.ListarProvincia(IDDEPT);

                if (lista == null || lista.Count() == 0) { MostrarComentario("No existen datos para las provincias."); return; }

                cboProvincia.DataSource = lista;
                cboProvincia.ValueField = "NPROV_SECPROV";
                cboProvincia.TextField = "CPROV_DESCRIP";
                cboProvincia.DataBind();

            }
            catch (Exception ex)
            {
                MostrarComentario(ex.Message, "CargarProvincia");
            }
        }

        private void CargarDistrito(String dept = "", String prov = "")
        {
            try
            {
                String IDPROV = String.Empty;
                String IDDEPT = String.Empty;
                if (IDDEPT == String.Empty && IDPROV == String.Empty)
                {
                    if (cboProvincia.SelectedItem == null) { MostrarComentario("Debe seleccionar una provincia."); return; }
                    IDDEPT = cboDepartamento.SelectedItem.Value.ToString();
                    IDPROV = cboProvincia.SelectedItem.Value.ToString();
                }
                else
                {
                    IDPROV = prov;
                    IDDEPT = dept;
                }

                lista = new List<Object>();
                LegajoActualizar = new clsFacadeLegajoActualizar();
                lista = LegajoActualizar.ListarDistritos(IDDEPT, IDPROV);

                if (lista == null || lista.Count() == 0) { MostrarComentario("No existen datos para los distritos."); return; }

                cboDistrito.DataSource = lista;
                cboDistrito.ValueField = "NDIST_SECDIST";
                cboDistrito.TextField = "CDIST_DESCRIP";
                cboDistrito.DataBind();

            }
            catch (Exception ex)
            {
                MostrarComentario(ex.Message, "CargarDistrito");
            }
        }

        private void CargarAbogado()
        {
            try
            {
                lista = new List<Object>();
                LegajoActualizar = new clsFacadeLegajoActualizar();
                lista = LegajoActualizar.listarAbogado();

                if (lista == null || lista.Count() == 0) { MostrarComentario("No existen datos para los abogados."); return; }

                cboAbogado.DataSource = lista;
                cboAbogado.ValueField = "Cp_per_codigo";
                cboAbogado.TextField = "nom_abogado";
                cboAbogado.DataBind();

            }
            catch (Exception ex)
            {
                MostrarComentario(ex.Message, "CargarAbogado");
            }

        }

        private void CargarEntidad()
        {
            try
            {
                listaEntidad = new List<SGP_ENTIDAD>();
                LegajoActualizar = new clsFacadeLegajoActualizar();
                listaEntidad = LegajoActualizar.listarEntidad();

                if (listaEntidad == null || listaEntidad.Count() == 0) { MostrarComentario("No existen datos para las entidades agraviadas."); return; }

                cboEntidadAgraviada.DataSource = listaEntidad;
                cboEntidadAgraviada.ValueField = "CLEG_CODENT";
                cboEntidadAgraviada.TextField = "CLEG_DESCRIP";
                cboEntidadAgraviada.DataBind();

            }
            catch (Exception ex)
            {
                MostrarComentario(ex.Message, "CargarEntidad");
            }
        }

        private void CargarEstado()
        {
            try
            {
                listaEstado = new List<SGP_ESTADO>();
                LegajoActualizar = new clsFacadeLegajoActualizar();
                listaEstado = LegajoActualizar.listarEstado();

                if (listaEstado == null || listaEstado.Count() == 0) { MostrarComentario("No existen datos para los estados."); return; }

                cboEstado.DataSource = listaEstado;
                cboEstado.ValueField = "CTAB_ESTLEG";
                cboEstado.TextField = "CTAB_DESCRIP";
                cboEstado.DataBind();
            }
            catch (Exception ex)
            {
                MostrarComentario(ex.Message, "CargarEstado");
            }
        }

        private void CargarUnidOrg()
        {
            try
            {
                listaUnidOrg = new List<PRM_UNI_ORGANICA>();
                LegajoActualizar = new clsFacadeLegajoActualizar();
                listaUnidOrg = LegajoActualizar.listaUnidOrg();

                if (listaUnidOrg == null || listaUnidOrg.Count() == 0) { MostrarComentario("No existen datos para las Unidades Orgánicas"); return; }

                cboUnidadOrganica.DataSource = listaUnidOrg;
                cboUnidadOrganica.ValueField = "Cp_uno_codigo";
                cboUnidadOrganica.TextField = "Cp_uno_descripcion";
                cboUnidadOrganica.DataBind();
            }
            catch (Exception ex)
            {
                MostrarComentario(ex.Message, "CargarUnidOrg");
            }
        }

        private void Grabar()
        {
            if (!ValidarCampos()) { return; }
            if (!GrabarLegajo()) { return; }
            Session["grabar"] = true;
            Session["msg"] = msg;
            Session["titulo"] = "Mensaje";
            Response.Redirect("wfrmLegajoListar.aspx", false);
            return;
        }

        private Boolean ValidarCampos()
        {
            Boolean ok = true;
            msg = String.Empty;
            try
            {
                if (txtNumLegajo.Text.Trim() == String.Empty)
                {
                    ok = false;
                    msg = "El Numero de Pre Legajo no debe estar vacio.";
                }
                else if (cboDistritoJudicial.SelectedItem == null)
                {
                    ok = false;
                    msg = "Debe seleccionar un Distrito Judicial.";
                }
                else if (cboTipoProceso.SelectedItem == null)
                {
                    ok = false;
                    msg = "Debe seleccionar un Tipo de Proceso.";
                }
            }
            catch (Exception ex)
            {
                ok = false;
                msg = ex.Message;
            }

            if (!ok)
            {
                MostrarComentario(msg, "ValidarCampos");
            }
            return ok;
        }

        private Boolean GrabarLegajo()
        {
            Boolean ok = true;
            msg = String.Empty;

            try
            {
                LegajoActualizar = new clsFacadeLegajoActualizar();

                String CLEG_LEGAJO, CLEG_MODAPE, CDIS_DISJUD, CTAB_TIPPRO, CLEG_CODENT, CPRL_NUMEXP, CLEG_CODABO, CLEG_OBSLEG, CTAB_ESTLEG, CLEG_UBIGEO,
                    CLEG_UBIDEP, CLEG_UBIPRO, CLEG_UBIDIS, CPRL_DOCAUT, CLEG_UNIORG, CLEG_TITULO, NPER_SECPER, CTAB_PROCED, CTAB_MONTIP;
                DateTime? DLEG_FECREC, DPRL_DOCAUT, DLEG_APELEG, DLEG_FORADM, DLEG_FECEST;
                Decimal NPRL_MONPAG = 0;
                String monto = txtMontoPeritorio.Text.Trim();
                if (!Decimal.TryParse(monto, out NPRL_MONPAG))
                {
                    msg = "El Monto debe ser numerico.";
                    ok = false;
                }

                if (ok)
                {

                    CLEG_LEGAJO = txtNumLegajo.Text.Trim();
                    CLEG_MODAPE = cboModoApertura.SelectedItem.Value.ToString();
                    CDIS_DISJUD = cboDistritoJudicial.SelectedItem.Value.ToString();
                    CTAB_TIPPRO = cboTipoProceso.SelectedItem.Value.ToString();
                    DLEG_FECREC = (DateTime?)dtpRecepcion.Value;
                    CLEG_CODENT = (cboEntidadAgraviada.SelectedItem != null) ? cboEntidadAgraviada.SelectedItem.Value.ToString() : String.Empty;
                    CPRL_NUMEXP = txtNumExpediente.Text.Trim();
                    CLEG_CODABO = (cboAbogado.SelectedItem != null) ? cboAbogado.SelectedItem.Value.ToString() : String.Empty;
                    CLEG_OBSLEG = txtObservaciones.Text.Trim();
                    DPRL_DOCAUT = (DateTime?)dtpFecDocAutorizacionDC.Value;
                    CTAB_ESTLEG = (cboEstado.SelectedItem != null) ? cboEstado.SelectedItem.Value.ToString() : String.Empty;
                    DLEG_APELEG = (DateTime?)dtpFecFormulada.Value;
                    DLEG_FORADM = (DateTime?)dtpFecFormalizada.Value;
                    CLEG_UBIDEP = (cboDepartamento.SelectedItem != null) ? cboDepartamento.SelectedItem.Value.ToString() : String.Empty;
                    CLEG_UBIPRO = (cboProvincia.SelectedItem != null) ? cboProvincia.SelectedItem.Value.ToString() : String.Empty;
                    CLEG_UBIDIS = (cboDistrito.SelectedItem != null) ? cboDistrito.SelectedItem.Value.ToString() : String.Empty;
                    CLEG_UBIGEO = CLEG_UBIDEP + CLEG_UBIPRO + CLEG_UBIDIS;
                    DLEG_FECEST = (DateTime?)dtpFecEstado.Value;
                    CPRL_DOCAUT = txtNumDocAutorizacion.Text.Trim();
                    CLEG_UNIORG = (cboUnidadOrganica.SelectedItem != null) ? cboUnidadOrganica.SelectedItem.Value.ToString() : String.Empty;
                    CLEG_TITULO = txtTitulo.Text.Trim();
                    NPER_SECPER = (txtAbogado.Text.Trim() == String.Empty) ? "0" : txtAbogado.Text.Trim();
                    CTAB_PROCED = (cboProcedencia.SelectedItem != null) ? cboProcedencia.SelectedItem.Value.ToString() : String.Empty;
                    CTAB_MONTIP = (cboMoneda.SelectedItem != null) ? cboMoneda.SelectedItem.Value.ToString() : String.Empty;
                    NPRL_MONPAG = Convert.ToDecimal(monto);


                    objSGP_Legajo = new SGP_LEGAJO();
                    objSGP_Legajo.CLEG_LEGAJO = CLEG_LEGAJO;
                    objSGP_Legajo.CLEG_MODAPE = CLEG_MODAPE;
                    objSGP_Legajo.CDIS_DISJUD = CDIS_DISJUD;
                    objSGP_Legajo.CTAB_TIPPRO = CTAB_TIPPRO;
                    objSGP_Legajo.DLEG_FECREC = DLEG_FECREC;
                    objSGP_Legajo.CLEG_CODENT = CLEG_CODENT;
                    objSGP_Legajo.CPRL_NUMEXP = CPRL_NUMEXP;
                    objSGP_Legajo.CLEG_CODABO = CLEG_CODABO;
                    objSGP_Legajo.CLEG_OBSLEG = CLEG_OBSLEG;
                    objSGP_Legajo.DPRL_DOCAUT = DPRL_DOCAUT;
                    objSGP_Legajo.CTAB_ESTLEG = CTAB_ESTLEG;
                    objSGP_Legajo.DLEG_APELEG = DLEG_APELEG;
                    objSGP_Legajo.DLEG_FORADM = DLEG_FORADM;
                    objSGP_Legajo.CLEG_UBIGEO = CLEG_UBIGEO;
                    objSGP_Legajo.DLEG_FECEST = DLEG_FECEST;
                    objSGP_Legajo.CLEG_UBIDEP = CLEG_UBIDEP;
                    objSGP_Legajo.CLEG_UBIPRO = CLEG_UBIPRO;
                    objSGP_Legajo.CLEG_UBIDIS = CLEG_UBIDIS;
                    objSGP_Legajo.CPRL_DOCAUT = CPRL_DOCAUT;
                    objSGP_Legajo.CLEG_UNIORG = CLEG_UNIORG;
                    objSGP_Legajo.CLEG_TITULO = CLEG_TITULO;
                    objSGP_Legajo.NPER_SECPER = Convert.ToInt32(NPER_SECPER);
                    objSGP_Legajo.CTAB_PROCED = CTAB_PROCED;
                    objSGP_Legajo.CTAB_MONTIP = CTAB_MONTIP;
                    objSGP_Legajo.NPRL_MONPAG = NPRL_MONPAG;

                    op = Session["op"].ToString();

                    if (op == "N") { ok = LegajoActualizar.InsertarLegajo(objSGP_Legajo); }
                    else if (op == "M") { ok = LegajoActualizar.ModificarLegajo(objSGP_Legajo); }

                    if (op == "N") { msg = (!ok) ? "Ocurrió un error al registrar el legajo." : "Se registró el legajo correctamente."; }
                    else if (op == "M") { msg = (!ok) ? "Ocurrió un error al actualizar el legajo" : "Se actualizó el legajo correctamente."; }
                }
            }
            catch (Exception ex)
            {
                ok = false;
                msg = (ex.InnerException == null) ? ex.Message : ex.InnerException.Message;
            }

            if (!ok) { MostrarComentario(msg, "GrabarLegajo"); } else { MostrarComentario(msg); }
            return ok;
        }

        private void Cancelar()
        {
            Response.Redirect("wfrmLegajoListar.aspx");
        }

        protected void btnGrabar_Click(object sender, EventArgs e)
        {
            Grabar();
        }

        private void MostrarComentario(String msg, String titulo = "Mensaje")
        {
            lblMensaje.Text = msg;
            pcMensaje.HeaderText = titulo;
            pcMensaje.ShowOnPageLoad = true;
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            Cancelar();
        }

        protected void cboDepartamento_SelectedIndexChanged(object sender, EventArgs e)
        {
            CargarProvincia();
        }

        protected void cboProvincia_SelectedIndexChanged(object sender, EventArgs e)
        {
            CargarDistrito();
        }

        
        private void Opcion(string flag_OP)
        {
            if (flag_OP=="0003")// cuando es por terceros
            {

                cboEntidadAgraviada.Enabled = false;
                txtNumDocAutorizacion.Enabled = false;
                dtpFecDocAutorizacionDC.Enabled = false;
                
            }
            else
            {
                cboEntidadAgraviada.Enabled = true;
                txtNumDocAutorizacion.Enabled = true;
                dtpFecDocAutorizacionDC.Enabled = true;
            }
        }

        protected void cboModoApertura_SelectedIndexChanged(object sender, EventArgs e)
        {
            Opcion(cboModoApertura.SelectedItem.Value.ToString());

        }

        protected void cboModoApertura_TextChanged(object sender, EventArgs e)
        {
            Opcion(cboModoApertura.SelectedItem.Value.ToString());
        }

    }
}